const { verifyToken } = require('../utils/jwt');
const redis = require('../config/redis');

/**
 * 认证中间件
 */
const auth = async (req, res, next) => {
  try {
    // 获取请求头中的授权信息
    const authHeader = req.headers.authorization;
    
    if (!authHeader || !authHeader.startsWith('Bearer ')) {
      return res.status(401).json({
        code: 401,
        message: '未授权，请提供有效的令牌'
      });
    }
    
    // 提取令牌
    const token = authHeader.split(' ')[1];
    
    // 检查令牌是否被注销
    const isBlacklisted = await redis.get(`blacklist:${token}`);
    if (isBlacklisted) {
      return res.status(401).json({
        code: 401,
        message: '令牌已失效，请重新登录'
      });
    }
    
    // 验证令牌
    const decoded = await verifyToken(token);
    
    // 将用户信息添加到请求对象
    req.user = decoded;
    
    next();
  } catch (error) {
    next(error);
  }
};

module.exports = auth;
